unity2019.3 所有控制按键输入方法 input 鼠标输入,键盘输入,触屏输入,屏幕点击事件,物体拖拽点击事件说明带实例 | 您所在的位置:网站首页 › 控制 按键 › unity2019.3 所有控制按键输入方法 input 鼠标输入,键盘输入,触屏输入,屏幕点击事件,物体拖拽点击事件说明带实例 |
配置按键
unity为满足跨平台需求支持多种输入方式,比较常见的有触屏、摇杆、鼠标、按键。 虽然unity可以直接在代码中直接指定某个按键的功能,但我们最好使用按键管理器来为项目配置输入操作。这是不仅是为了更好的统一管理,还是因为unity提供了更简单可控的配置方案,并且可以直接使用unity自带的输入设置工具提供给用户自行配置。当程序打包完成后,用户也可以在程序启动器的button setting处配置。但要使用这个功能,需要在项目打包的时候设置启动器。 在Edit->project setting -> input 处可以对按键细节进行设置: 获取鼠标位置: Input.mousePosition 点击事件: 鼠标按键ID:左键0,右键1,滚轮2 保持按下为true,随帧率多次触发:Input.GetMouseButton(0) 按下为true,只触发一次 :Input.GetMouseButtonDown(0) 释放为true,只触发一次:Input.GetMouseButtonUp(0) //例: void Update() { //获取位置 Debug.Log("当前鼠标位置",Input.mousePosition); //点击 if(Input.GetMouseButton(0)) Debug.Log("点击"); }场景中的鼠标事件: 与unity生命周期或是碰撞检测器的使用方法类似,但物体必须拥有碰撞检测组件collider, OnMouseEnter(){} OnMouseOver(){} OnMouseExit(){} OnMouseDown(){} OnMouseUp(){} OnMouseDrag(){} OnMouseUpAsButton(){} 例: void Update() { } void OnMouseEnter(){ Debug.Log("鼠标进入了区域"); } 触摸控制触摸控制略有特殊,因为涉及到多点控制。 Input.multiTouchEnabled //允许多点触控 Input.simulateMouseWithTouches Input.touchCount //多点总数 Input.touches //多个记录触控点 Input.touchSupported Input.GetTouch() Touch myTouch = Input.touches[0]//获取当前第一个触点 myTouch.fingerId//触点id myTouch.deltaPosition//触点移动距离 myTouch.deltaTime//触点经过时间 myTouch.tapCount//触点点击次数 myTouch.phase//触点状态 例: private void Update() { //判断当前是否有触点 if (Input.touchCount > 0) { Debug.Log("当前触点总数为:"+ Input.touchCount); //获取第一个触点0,1就是第二个 Touch myTouch = Input.touches[0]; //fingerId用来辨别触点身份 Debug.Log("第一个触点的唯一id是:"+myTouch.fingerId) ; //实时反馈当前触点位置与最先触碰时的位置距离 Debug.Log("当前触点移动了距离:"+myTouch.deltaPosition); //实时反馈当前触点位置与最先触碰时的时间 Debug.Log("当前触点距离首次触碰时间经过了:"+myTouch.deltaTime ); //触点对象并不是手指抬起后立刻销毁,如果手指在同一位置快速点击,属于同一Touch对象 //点击屏幕的次数 Debug.Log("当前触点点击次数为:"+myTouch.tapCount ); //当前触点的状态 //Began 触碰开始,Moved 触碰后移动,Stationary触碰后不动,Ended 手指离开,Canceled 取消状态 Debug.Log("当前触点状态为:"+myTouch.phase ); } } 按键控制返回-1到1之间的float值:Input.GetAxis() 、 返回定点值-1,0,1或者摇杆的位置:Input.GetAxisRaw() 保持为true,随帧率触发:Input.GetButton(“a”) 按下为true,只触发一次:Input.GetButtonDown("") 释放为true,只触发一次:Input.GetButtonUp("") 点击为true,否则为false:Input.GetKey() 例: void Update() { //直接输入Key值 if (Input.GetKey("up")) //通过KeyCode类输入Key值 if (Input.GetKey(KeyCode.UpArrow)) //直接输入键盘按键名 if(Input.GetKey("a")) //数字按键 if(Input.GetKey("1")) //小键盘 if(Input.GetKey("[1]")) //功能键 if(Input.GetKey("left shift")) //鼠标 backspace if(Input.GetKey("mouse 0")) //特殊 if(Input.GetKey("backspace")) } 拖拽事件拖拽事件需要实现相关的事件接口。这个是我做的中间件脚本。可以方便的通过代码设置在指定物体上,通过委托直接赋予行为。 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; public class mDragEvent : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler { public delegate void OnBeginDrag_delegate(PointerEventData eventData); public event OnBeginDrag_delegate OnBeginDrag_event; public delegate void OnDrag_delegate(PointerEventData eventData); public event OnDrag_delegate OnDrag_event; public delegate void OnEndDrag_delegate(PointerEventData eventData); public event OnEndDrag_delegate OnEndDrag_event; void IBeginDragHandler.OnBeginDrag(PointerEventData eventData) { Debug.Log("start"); OnBeginDrag_event?.Invoke(eventData); } void IDragHandler.OnDrag(PointerEventData eventData) { Debug.Log("drag"); OnDrag_event?.Invoke(eventData); } void IEndDragHandler.OnEndDrag(PointerEventData eventData) { Debug.Log("end"); OnEndDrag_event?.Invoke(eventData); } } 点击事件点击事件需要实现相关的事件接口。这个是我做的中间件脚本。可以方便的通过代码设置在指定物体上,通过委托直接赋予行为。 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; public class mPointerEvent : MonoBehaviour, IPointerClickHandler, IPointerDownHandler, IPointerUpHandler, IPointerEnterHandler, IPointerExitHandler { public delegate void OnPointerClick_delegate(PointerEventData eventData); public event OnPointerClick_delegate OnPointerClick_evnet; public delegate void OnPointerDown_delegate(PointerEventData eventData); public event OnPointerDown_delegate nPointerDown_evnet; public delegate void OnPointerEnter_delegate(PointerEventData eventData); public event OnPointerEnter_delegate OnPointerEnter_evnet; public delegate void OnPointerExit_delegate(PointerEventData eventData); public event OnPointerExit_delegate OnPointerExit_evnet; public delegate void OnPointerUp_delegate(PointerEventData eventData); public event OnPointerUp_delegate OnPointerUp_evnet; void IPointerClickHandler.OnPointerClick(PointerEventData eventData) { if(OnPointerClick_evnet != null){ this.OnPointerClick_evnet(eventData); } } void IPointerDownHandler.OnPointerDown(PointerEventData eventData) { if(nPointerDown_evnet != null){ this.nPointerDown_evnet(eventData); } } void IPointerEnterHandler.OnPointerEnter(PointerEventData eventData) { if(OnPointerEnter_evnet != null){ this.OnPointerEnter_evnet(eventData); } } void IPointerExitHandler.OnPointerExit(PointerEventData eventData) { if(OnPointerExit_evnet != null){ this.OnPointerExit_evnet(eventData); } } void IPointerUpHandler.OnPointerUp(PointerEventData eventData) { if(OnPointerUp_evnet != null){ this.OnPointerUp_evnet(eventData); } } } 官方文档:https://docs.unity3d.com/ScriptReference/Input.html |
CopyRight 2018-2019 实验室设备网 版权所有 |